package com.jt.demo1.controller;

import com.jt.demo1.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController   //@Controller+@ResponseBody  -----类中的方法返回的数据都是JSON
@RequestMapping("/user") // 定义公共的访问路径前缀
public class UserController {
    /**
     * 类型：get请求
     * 返回值：String ------id: name
     * 补充Servlet 知识
     * 使用对象.getParamerter("参数名") 获取URL中的String类型参数值
     * URL:http://localhost:8080/user/findUser?id=100&name=tomcat
     * */
    @RequestMapping("/findUser")
    public String finderUser(HttpServletRequest request,
                             HttpServletResponse response){
        String id=request.getParameter("id");
        int intId = Integer.parseInt(id);
        String name=request.getParameter("name");
        return intId+";"+name;
    }

    /**
     * URL:http://localhost:8080/user/findUser2?id=100&name=tomcat
     * 规则:SpringMVC中的参数名称，必须与传递参数名称一致
     * 原理：SpringMVC在内部将Servlet的取值的方式包装，用户只需填写参数
     *  即可
     * */
    @RequestMapping("/findUser2")
    public String findUser2(Integer id,String name){

        return id+";"+name;
        }
    /**
     * url:http://localhost:8080/user/getUser?id=1&name=李四&age=18
     * 返回值：User对象
     * 知识点：
     *  1.当遇到多个参数时，可以使用对象封装。
     *  2.要求：对象的属性必须与参数名称一致，同时必须有set/get方法
     *      SpringMVC会自动的将参数赋值给对象的属性
     *
     * */
    @RequestMapping("/getUser")
    public User getUser(User user){
        return user;
    }
    /**
     * RestFul结构  动态接收参数
     * URL：http://localhost:8080/user/restFul/1/张三
     * 返回值：返回User对象
     * 难点：需要从URL的路径中获取参数！！！
     * 语法：
     *  1.服务器参数接收时，变量使用{xx}进行包裹，并且位置固定
     *  2.利用@PathVariable注解，动态获取路径中的数据，要求名称必须匹配
     * */
    @RequestMapping("/restFul/{id}/{name}")
    public User restFul(@PathVariable Integer id,@PathVariable String name){
        User user = new User();
        user.setId(id);
        user.setName(name);
        return user;
    }
    /**
     * url:http://localhost:8080/user/restFul2/1/王五/18
     * RestFul对象接收：
     *  如果对象的属性与{key}相同，则可以使用对象接收
     *  用途：restFul结构 一般用于更新操作
     * @param user
     * @return
     * */
//    @RequestMapping(value = "/restFul2/{id}/{name}/{age}",
//        method = RequestMethod.GET)
    @RequestMapping("/restFul2/{id}/{name}/{age}")
    public User restFul2(User user){
        return user;
    }
    /**
     * url:http://localhost:8080/user/saveHobby?hobby=篮球,排球,乒乓球
     * 返回值：参数获取之后返回
     * SpringMVC功能：
     *  如果url中的参数使用逗号的方式连接，则可以自动的转化为数组结构
     * */
    @RequestMapping("/saveHobby")
    public String[] saveHobby(String[] hobby){

        return hobby;
    }
}
